#include "main.h"
#include "command.h"

#define COMMAND_MAXBUFFLEN     64 //定义串口的接收缓冲

//system command
static command_t command_table[] = {
    {"uart_test",uart_test,NULL},
    {"oled_test",oled_test,NULL},
    {NULL,NULL,NULL},
};

// 处理串口接收到的指令
void processCommand(const char* commandLine) 
{
    char line[COMMAND_MAXBUFFLEN];
    char* cmd;
    char* param;

    // 复制输入字符串避免修改原始数据
    // line = malloc(strlen(commandLine)); 
    strncpy(line, commandLine, strlen(commandLine) - 1);
    line[strlen(line) - 1] = '\0';

    // 去除首尾空白字符
    char* start = line;
    while (isspace((unsigned char)*start)) start++;
    if (*start == '\0') return;  // 空行
    
    char* end = start + strlen(start) - 1;
    while (end > start && isspace((unsigned char)*end)) end--;
    *(end + 1) = '\0';
    
    // 分割命令和参数
    cmd = start;
    param = strchr(start, ' ');
    if (param != NULL) {
        *param = '\0';  // 截断命令部分
        param++;        // 指向参数开始
        
        // 去除参数前导空格
        while (isspace((unsigned char)*param)) param++;
    }
    
    // 在指令表中查找匹配的命令
    for (int i = 0; command_table[i].cmd != NULL; i++) {
        if (strcmp(cmd, command_table[i].cmd) == 0) {
            // 找到匹配的命令，执行对应的处理函数
            command_table[i].handler(param);
            return;
        }
    }
    
    free(line);

    // 未找到匹配的命令
    uart_send(UART_COM,"not find cmd!\n",14);
}
